#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：HiflyVideoAPI_Test 
@File    ：utils_uploadFile.py
@Author  ：beibei
@Date    ：2025/6/25 3:52 PM 
'''
import requests
import os

from utils.utils_base import save_json_response


def upload_file_to_hifly(api_base_url, local_file_path, file_extension, auth_token):
    """
    飞影上传流程：
    1. 调用 create_upload_url 获取 upload_url、content_type、file_id
    2. 使用 PUT 上传文件
    3. 返回 file_id

    :param api_base_url: API Host，例如 https://api.xxx.com
    :param local_file_path: 本地文件路径
    :param file_extension: 手动指定文件后缀，例如 mp4、mp3
    :param auth_token: 鉴权Token，从环境配置文件中获取
    :return: 上传后返回的 file_id
    """

    # Step 1: 调用 create_upload_url 获取上传信息
    create_url = f"{api_base_url}/api/v2/hifly/tool/create_upload_url"
    headers = {
        "Content-Type": "application/json",
        "Authorization": auth_token  # 必须带 Token
    }
    payload = {
        "file_extension": file_extension
    }

    resp = requests.post(create_url, json=payload, headers=headers)
    if resp.status_code != 200:
        raise Exception(f"获取上传URL失败，HTTP状态码: {resp.status_code}, 响应: {resp.text}")

    resp_json = resp.json()
    # if resp_json.get('code') != 0:
    #     raise Exception(f"获取上传URL失败，错误信息: {resp_json.get('msg')}")
    save_json_response(resp_json, "data/response/upload_url_create_upload_url.json")


    # Step 2: 用 PUT 上传文件
    with open(local_file_path, 'rb') as f:
        file_data = f.read()

    put_headers = {
        "Content-Type": content_type
    }

    put_resp = requests.put(upload_url, headers=put_headers, data=file_data)
    if put_resp.status_code not in [200, 201]:
        raise Exception(f"上传文件失败，HTTP状态码: {put_resp.status_code}, 响应: {put_resp.text}")

    print(f"[Step2] 文件上传成功，file_id: {file_id}")

    return file_id




